#ifndef GY_TRANSFORMGROUP_H
#define GY_TRANSFORMGROUP_H

#include <QGraphicsItem>
#include "GY_ContainerTransform.h"
#include "GY_ControlLibrary_global.h"

class GY_CONTROLLIBRARY_EXPORT GY_TransformGroup : public GY_ContainerTransform
{
    Q_OBJECT
public:
    //TODO:分层缩放，旋转。缩放同时移动中心点和旋转点
    explicit Q_INVOKABLE GY_TransformGroup(const QString &guid,QGraphicsItem *parent = nullptr);
    /**
     * @brief setContainerEditPointF 设置编辑点
     */
    void setContainerEditPointF();

private:
    qreal m_Width;
    qreal m_height;
signals:

    // GY_ContainerTransform interface
private:
    /**
     * @brief computationScaling 计算缩放点
     */
    void computationScaling();
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief updatePosition 是否隐藏
     * @param name 属性名称
     * @param value bool值
     * @return 是否更新成功
     */
    bool updateIsVisible(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新位置
     * @param name 属性名称
     * @param value 位置
     * @return 是否更新成功
     */
    bool updatePosition(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新左上点
     * @param name 属性名称
     * @param value 左上点
     * @return 是否更新成功
     */
    bool updateLeftTop(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新右上点
     * @param name 属性名称
     * @param value 右上点
     * @return 是否更新成功
     */
    bool updateRightTop(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新左下点
     * @param name 属性名称
     * @param value 左下点
     * @return 是否更新成功
     */
    bool updateLeftBottom(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新右下点
     * @param name 属性名称
     * @param value 右下点
     * @return 是否更新成功
     */
    bool updateRightBottom(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新旋转点
     * @param name 属性名称
     * @param value 旋转点
     * @return 是否更新成功
     */
    bool updateRotationPoint(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新角度
     * @param name 属性名称
     * @param value 角度
     * @return 是否更新成功
     */
    bool updateRotation(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新缩放点
     * @param name 属性名称
     * @param value 缩放点
     * @return 是否更新成功
     */
    bool updateScaling(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新是否允许旋转
     * @param name 属性名称
     * @param value 是否允许旋转
     * @return 是否更新成功
     */
    bool updateRotationInEditMode(const QString &name, const QVariant &value);
    /**
     * @brief updatePosition 更新是否允许缩放
     * @param name 属性名称
     * @param value 是否允许缩放
     * @return 是否更新成功
     */
    bool updateScaleInEditMode(const QString &name, const QVariant &value);
    /**
     * @brief UpdateDraw 更新绘制
     */
    void updateDraw();

};

#endif // GY_TRANSFORMGROUP_H
